package cn.handong.tool.Java文件操作;

import org.junit.Test;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributes;
import java.nio.file.attribute.FileTime;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class 查看文件夹下所有文件 {
    /**
     * 查看文件夹下所有文件
     */
    @Test
    public void testFindAllFile(){
        // 路径
//        findAllFile("C:\\hd");
        findAllFile1("C:\\Users\\sqkb8v\\IdeaProjects\\MMC\\sql\\init\\owmmc");
    }

    public void findAllFile(String path){
        SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
        Date date = new Date();
        long millis;
        try (Stream<Path> paths = Files.walk(Paths.get(path))){
            List<Path> fileNames = paths
                    .filter(Files::isRegularFile)
                    .collect(Collectors.toList());
            for (Path fileName : fileNames) {
                String myPath = fileName.toFile().getPath();
                System.out.println("该文件的绝对路径为 " + myPath);
                File file = new File(myPath);
                long fileSize = file.length() / 1024;
                System.out.println("该文件大小为 " + fileSize + "KB");

                // 根据path获取文件的基本属性类
                BasicFileAttributes attrs = Files.readAttributes(fileName, BasicFileAttributes.class);
                // 从基本属性类中获取文件创建时间
                FileTime fileTime = attrs.creationTime();
                // 将文件创建时间转成毫秒
                millis = fileTime.toMillis();
                date.setTime(millis);
                // 毫秒转成时间字符串
                String time = dateFormat.format(date);
                System.out.println("创建时间 ： " + time);

                // 从基本属性类中获取文件最后更新时间
                fileTime = attrs.lastModifiedTime();
                // 将文件最后更新时间转成毫秒
                millis = fileTime.toMillis();
                date.setTime(millis);
                // 毫秒转成时间字符串
                time = dateFormat.format(date);
                System.out.println("最后更新时间 ： " + time);
                System.out.println("---------------------");

            }
            System.out.println(fileNames);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    public void findAllFile1(String path){
        try (Stream<Path> paths = Files.walk(Paths.get(path))){
            List<Path> fileNames = paths
                    .filter(Files::isRegularFile)
                    .collect(Collectors.toList());
            for (Path fileName : fileNames) {
                System.out.println(fileName.getFileName());
//                String myPath = fileName.toFile().getPath();
//                System.out.println(myPath);
            }
            System.out.println(fileNames);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    @Test
    public void getDate() throws IOException {

        // 指定自己的目标文件
        File file = new File("C:\\hd\\985.txt");
        // 根据文件的绝对路径获取Path
        Path path = Paths.get(file.getAbsolutePath());
        // 根据path获取文件的基本属性类
        BasicFileAttributes attrs = Files.readAttributes(path, BasicFileAttributes.class);
        // 从基本属性类中获取文件创建时间
        FileTime fileTime = attrs.creationTime();
        // 将文件创建时间转成毫秒
        long millis = fileTime.toMillis();
        SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
        Date date = new Date();
        date.setTime(millis);
        // 毫秒转成时间字符串
        String time = dateFormat.format(date);
        System.out.println("创建时间 ： " + time);


        // 从基本属性类中获取文件最后更新时间
        fileTime = attrs.lastModifiedTime();
        // 将文件最后更新时间转成毫秒
        millis = fileTime.toMillis();
        date.setTime(millis);
        // 毫秒转成时间字符串
        time = dateFormat.format(date);
        System.out.println("最后更新时间 ： " + time);

    }

}
